/*
* 
* Fichier source projet intel Acceler8 sous license GNU GPL v3.
* Voir http://www.gnu.org/copyleft/gpl.html pour plus d'informations
* La license est egalement disponible dans le repertoire /doc
* 
* Cree le : mardi 01 novembre 2011 à 22 : 27.
* Auteurs : Axel MOINET et Arnaud DURAND.
* 
* Nom de fichier : convertLineToInt.cpp
* Chemin du fichier : src/classes/convertLineToInt/convertLineToInt.cpp
* 
* Description : Classe d'implementation de la conversion d'une chaine de caracteres en entree à
* un tableau de int à passer ensuite au filtre d'ajout au tableau de sommes de préfixes.
* Précédé par le filtre de lecture d'une ligne en chaine de caracteres.
* 
*/

#include "convertLineToInt.h"
#include "../../includes/typedefs.h"
#include <stdio.h>

convertLineToInt::convertLineToInt() : tbb::filter(serial_in_order) {

}

convertLineToInt::~convertLineToInt() {

}

void* convertLineToInt::operator()(void *p_chaineCaracteres) {
	this->calculatedLine = new concurrent_vector<int>();
	concurrent_vector<char> *chaineCaracteres = static_cast<concurrent_vector<char>* >(p_chaineCaracteres);
	char *temporaryChain;
	int y = 0, col = 0, src=0;
	int tailleVector = chaineCaracteres->size();

	for (int i=0; i<tailleVector; i++) {
		if((*chaineCaracteres)[i] == ' ') {
			temporaryChain = new char[y];
			//Boucle a paralleliser si on trouve le temps
			for(int v=0; v<=y; v++) {
				temporaryChain[v] = (*chaineCaracteres)[src+v];
			}
			sscanf(temporaryChain, "%d", &(*this->calculatedLine)[col]);
			col++;
			y=0;
			src=i+1;
		}
		else
			y++;
	}

	//Libération de la mémoire prise par le vecteur contenant la ligne en mode textuel
	delete p_chaineCaracteres;

	return this->calculatedLine;
}
